import java.util.*;
//前缀
public class Main2 {
    static final int N = (int) 1e5 + 10;
    static int[][] stk = new int[N][2]; // x->前缀还是后缀, y->操作的下标
    static int[] ans = new int[N]; // 存结果
    static int n, m;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();//序列长度
        m = sc.nextInt();//操作次数
        int top = 0;

        while (m-- > 0) {
            int p = sc.nextInt();//操作类型
            int q = sc.nextInt();//参数


            if (p == 0) {//0-q是降序  前缀操作
                while (top > 0 && stk[top][0] == 0) {
                    q = Math.max(q, stk[top--][1]);
                }

                while (top >= 2 && stk[top - 1][1] <= q) {
                    top -= 2;
                }
                stk[++top][0] = 0;
                stk[top][1] = q;



            } else if (top > 0) {  //q—n是升序
                while (top > 0 && stk[top][0] == 1) {
                    q = Math.min(q, stk[top--][1]);
                }
                while (top >= 2 && stk[top - 1][1] >= q) {
                    top -= 2;
                }
                stk[++top][0] = 1;
                stk[top][1] = q;
            }
        }

        int k = n;
        int l = 1, r = n;

        for (int i = 1; i <= top; i++) {
            if (stk[i][0] == 0) { // 前缀操作
                while (r > stk[i][1] && l <= r) {
                    ans[r--] = k--;
                }
            } else { // 后缀操作
                while (l < stk[i][1] && l <= r) {
                    ans[l++] = k--;
                }
            }
            if (l > r) break;
        }

        // 所有操作全部做完，但还没填满，l<r
        if (top % 2 == 1) { // 如果操作数是奇数，栈内最后一个是前缀操作
            while (l <= r) {
                ans[l++] = k--;
            }
        } else { // 如果操作数是偶数，栈内最后一个是后缀操作
            while (l <= r) {
                ans[r--] = k--;
            }
        }

        for (int i = 1; i <= n; i++) {
            System.out.print(ans[i] + " ");
        }
    }
}
